package beans;

import java.util.ArrayList;

import tela.LogicaCliente;
import tela.Posicao;

public class RainhaMoves extends AbstractMoves {

	public RainhaMoves(int[][] matriz, Posicao posicao, LogicaCliente logicaCliente) {
		super(matriz, posicao, logicaCliente);
	}

	@Override
	public ArrayList<Posicao> calcula() {
		int x;
		int y;
		if(matriz[posicao.getI()][posicao.getJ()] < 10){//branco
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>Inicio dos movimento laterais<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
			for(int i = posicao.getI()+1; i<8 ; i++){
				if(matriz[i][posicao.getJ()] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(i, posicao.getJ()));
				}
				else if(matriz[i][posicao.getJ()] > 10){
					botoesPintar.add(new Posicao(i, posicao.getJ()));
					break;
				}
				else{
					break;
				}
			}
			for(int i = posicao.getI()-1; i>=0 ; i--){
				if(matriz[i][posicao.getJ()] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(i, posicao.getJ()));
				}
				else if(matriz[i][posicao.getJ()] > 10){
					botoesPintar.add(new Posicao(i, posicao.getJ()));
					break;
				}
				else{
					break;
				}
			}
			for(int j = posicao.getJ()-1; j>=0 ; j--){
				if(matriz[posicao.getI()][j] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(posicao.getI(), j));
				}
				else if(matriz[posicao.getI()][j] > 10){
					botoesPintar.add(new Posicao(posicao.getI(), j));
					break;
				}
				else{
					break;
				}
			}
			for(int j = posicao.getJ()+1; j<8 ; j++){
				if(matriz[posicao.getI()][j] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(posicao.getI(), j));
				}
				else if(matriz[posicao.getI()][j] > 10){
					botoesPintar.add(new Posicao(posicao.getI(), j));
					break;
				}
				else{
					break;
				}
			}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>Fim dos movimento laterais<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>Inicio dos movimento Diagonais<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
			x=posicao.getI()+1;
			y=posicao.getJ()+1;
			while(x<8 && y<8){
				if(matriz[x][y] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(x, y));
				}
				else if(matriz[x][y] > 10){
					botoesPintar.add(new Posicao(x, y));
					break;
				}
				else{
					break;
				}
				x++;
				y++;
			}
			
			x=posicao.getI()+1;
			y=posicao.getJ()-1;
			while(x<8 && y>=0){
				if(matriz[x][y] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(x, y));
				}
				else if(matriz[x][y] > 10){
					botoesPintar.add(new Posicao(x, y));
					break;
				}
				else{
					break;
				}
				x++;
				y--;
			}

			x=posicao.getI()-1;
			y=posicao.getJ()+1;
			while(x>=0 && y<8){
				if(matriz[x][y] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(x, y));
				}
				else if(matriz[x][y] > 10){
					botoesPintar.add(new Posicao(x, y));
					break;
				}
				else{
					break;
				}
				x--;
				y++;
			}
			
			x=posicao.getI()-1;
			y=posicao.getJ()-1;
			while(x>=0 && y>=0){
				if(matriz[x][y] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(x, y));
				}
				else if(matriz[x][y] > 10){
					botoesPintar.add(new Posicao(x, y));
					break;
				}
				else{
					break;
				}
				x--;
				y--;
			}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>Fim dos movimento Diagonais<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
		}
		else{											//preto
			//>>>>>>>>>>>>>>>>>>>>>>>>>>>>Inicio dos movimento laterais<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
			for(int i = posicao.getI()+1; i<8 ; i++){
				if(matriz[i][posicao.getJ()] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(i, posicao.getJ()));
				}
				else if(matriz[i][posicao.getJ()] < 10){
					botoesPintar.add(new Posicao(i, posicao.getJ()));
					break;
				}
				else{
					break;
				}
			}
			for(int i = posicao.getI()-1; i>=0 ; i--){
				if(matriz[i][posicao.getJ()] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(i, posicao.getJ()));
				}
				else if(matriz[i][posicao.getJ()] < 10){
					botoesPintar.add(new Posicao(i, posicao.getJ()));
					break;
				}
				else{
					break;
				}
			}
			for(int j = posicao.getJ()-1; j>=0 ; j--){
				if(matriz[posicao.getI()][j] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(posicao.getI(), j));
				}
				else if(matriz[posicao.getI()][j] < 10){
					botoesPintar.add(new Posicao(posicao.getI(), j));
					break;
				}
				else{
					break;
				}
			}
			for(int j = posicao.getJ()+1; j<8 ; j++){
				if(matriz[posicao.getI()][j] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(posicao.getI(), j));
				}
				else if(matriz[posicao.getI()][j] < 10){
					botoesPintar.add(new Posicao(posicao.getI(), j));
					break;
				}
				else{
					break;
				}
			}
			//>>>>>>>>>>>>>>>>>>>>>>>>>>>>Fim dos movimento laterais<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
			//>>>>>>>>>>>>>>>>>>>>>>>>>>>>Inicio dos movimento Diagonais<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
			x=posicao.getI()+1;
			y=posicao.getJ()+1;
			while(x<8 && y<8){
				if(matriz[x][y] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(x, y));
				}
				else if(matriz[x][y] < 10){
					botoesPintar.add(new Posicao(x, y));
					break;
				}
				else{
					break;
				}
				x++;
				y++;
			}
			
			x=posicao.getI()+1;
			y=posicao.getJ()-1;
			while(x<8 && y>=0){
				if(matriz[x][y] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(x, y));
				}
				else if(matriz[x][y] < 10){
					botoesPintar.add(new Posicao(x, y));
					break;
				}
				else{
					break;
				}
				x++;
				y--;
			}

			x=posicao.getI()-1;
			y=posicao.getJ()+1;
			while(x>=0 && y<8){
				if(matriz[x][y] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(x, y));
				}
				else if(matriz[x][y] < 10){
					botoesPintar.add(new Posicao(x, y));
					break;
				}
				else{
					break;
				}
				x--;
				y++;
			}
			
			x=posicao.getI()-1;
			y=posicao.getJ()-1;
			while(x>=0 && y>=0){
				if(matriz[x][y] == Pecas.VAZIO){
					botoesPintar.add(new Posicao(x, y));
				}
				else if(matriz[x][y] < 10){
					botoesPintar.add(new Posicao(x, y));
					break;
				}
				else{
					break;
				}
				x--;
				y--;
			}
			
			//>>>>>>>>>>>>>>>>>>>>>>>>>>>>Fim dos movimento Diagonais<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
		}
		return botoesPintar;
	}

}